package model

import (
	"gitee.com/xuxinzhi2206/corehub/database/mysql"
	"gorm.io/gorm"
)

// 文章表
type Articles struct {
	Model
	Title       string `gorm:"type:varchar(255);not null;comment:文章标题"`
	Content     string `gorm:"type:text;not null;comment:文章内容"`
	ArticlesImg string `gorm:"type:varchar(100);not null;comment:文章图片"`
	Author      string `gorm:"type:varchar(20);not null;comment:作者名称"`
	LikeCount   int64  `gorm:"type:int;default:0;comment:收藏数"`
	ReadCount   int64  `gorm:"type:int;default:0;comment:阅读数"`
}

// 发现文章添加
func (a *Articles) ArticlesCreate() (*Articles, error) {
	return a, mysql.WithMysql(func(db *gorm.DB) error {
		return db.Create(a).Error
	})
}

// 发现文章详情
func (a *Articles) ArticlesShow(id int64) (*Articles, error) {
	return a, mysql.WithMysql(func(db *gorm.DB) error {
		return db.Model(a).Where("id = ?", id).Find(a).Error
	})
}

// 发现文章修改
func (a *Articles) ArticlesUpdate(id int64) (*Articles, error) {
	err := mysql.WithMysql(func(db *gorm.DB) error {
		return db.Model(a).Where("id = ?", id).Updates(a).Error
	})
	return a, err
}

// 发现文章删除
func (a *Articles) ArticlesDelete(id int64) (*Articles, error) {
	err := mysql.WithMysql(func(db *gorm.DB) error {
		return db.Model(a).Where("id = ?", id).Delete(a).Error
	})
	return a, err
}

// 发现文章列表
func (a *Articles) ArticlesList(title string) (infos []*Articles, err error) {
	err = mysql.WithMysql(func(db *gorm.DB) error {
		if title == "" {
			return db.Find(&infos).Error
		}
		return db.Where("title like ?", "%"+title+"%").Find(&infos).Error
	})
	return infos, err
}

// 增加阅读数
func (a *Articles) ReadCountRise(id int64) (*Articles, error) {
	err := mysql.WithMysql(func(db *gorm.DB) error {
		return db.Model(a).Where("id = ?", id).Update("read_count", gorm.Expr("read_count + 1")).Error
	})
	return a, err
}

// 增加收藏数
func (a *Articles) LikeCountRise(id int64) (*Articles, error) {
	return a, mysql.WithMysql(func(db *gorm.DB) error {
		return db.Model(a).Where("id = ?", id).Update("like_count", gorm.Expr("like_count + 1")).Error
	})
}

// 减少收藏数
func (a *Articles) LikeCountMinimize(id int64) (*Articles, error) {
	return a, mysql.WithMysql(func(db *gorm.DB) error {
		return db.Model(a).Where("id = ?", id).Update("like_count", gorm.Expr("like_count - 1")).Error
	})
}
